package org.example.jdbc_study.common.util;

import org.example.jdbc_study.domain.vo.MyUserVo;

import java.util.Arrays;
import java.util.stream.Collectors;

/**
 * 报文工具类
 *
 * @author 欧阳劲驰
 * @since 0.0。1
 */
public class MessageUtil {
    /**
     * 解码MyUser
     * <p>假定报文格式为:{@code username=xxx;password=xxx;}</p>
     *
     * @param message 报文
     * @return MyUserVo
     */
    public static MyUserVo decoding(String message) {
        //报文判空
        if (message == null || message.isBlank()) return null;
        //创建对象
        MyUserVo myUserVo = new MyUserVo();
        //将字符串按';'裁切层字符串数组,并转换成字符串流
        Arrays.stream(message.split(";"))
                //过滤不为空并且包含等号的字符串
                .filter(s -> !s.isBlank() && s.contains("="))
                //转为为等号左边为key右边为value的键值对
                .collect(Collectors.toMap(s1 ->
                                //key为等号0至等号
                                s1.substring(0, s1.indexOf("=")),
                        //value为等号+1至结尾
                        s1 -> s1.substring(s1.indexOf("=") + 1)))
                //遍历键值对
                .forEach((key, value) -> {
                    //根据key设置对应的字段
                    switch (key) {
                        case "username" -> myUserVo.setUsername(value);
                        case "password" -> myUserVo.setPassword(value);
                    }
                });
        return myUserVo;
    }
}
